/*
 *      Copyright (C) 2005-2009 Team XBMC
 *      http://xbmc.org
 *
 *  This Program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  This Program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with XBMC Remote; see the file license.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *  http://www.gnu.org/copyleft/gpl.html
 *
 */

package com.mediaportal.ampdroid.utils;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class WakeOnLan {
   public Boolean sendMagicPacket(String macStr, String ipStr, int PORT) {              
      try {
          byte[] macBytes = getMacBytes(macStr);
          byte[] bytes = new byte[6 + 16 * macBytes.length];
          for (int i = 0; i < 6; i++) {
              bytes[i] = (byte) 0xff;
          }
          for (int i = 6; i < bytes.length; i += macBytes.length) {
              System.arraycopy(macBytes, 0, bytes, i, macBytes.length);
          }
          
          InetAddress address = InetAddress.getByName(ipStr);
          DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, PORT);
          DatagramSocket socket = new DatagramSocket();
          socket.send(packet);
          socket.close();
          return true;
      }
      catch (Exception e) {
       return false;
      }
  }

 public Boolean sendMagicPacket(String macStr, int PORT) {
    return sendMagicPacket(macStr, "255.255.255.255", PORT);
 }

  public Boolean sendMagicPacket(String macStr) {
    return sendMagicPacket(macStr, "255.255.255.255", 9);
  }
  
  private static byte[] getMacBytes(String macStr) throws IllegalArgumentException {
      byte[] bytes = new byte[6];
      String[] hex = macStr.split("(\\:|\\-)");
      if (hex.length != 6) {
          throw new IllegalArgumentException("Invalid MAC address.");
      }
      try {
          for (int i = 0; i < 6; i++) {
              bytes[i] = (byte) Integer.parseInt(hex[i], 16);
          }
      }
      catch (NumberFormatException e) {
          throw new IllegalArgumentException("Invalid hex digit in MAC address.");
      }
      return bytes;
  }
}
